home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FishMarket 1.0
/
FishMarket v1.0.iso
/
fishies
/
201-225
/
disk_221
/
iffm2
/
iffm2.def
< prev
next >
Wrap
Text File
|
1992-05-06
|
9KB
|
229 lines
DEFINITION MODULE IFFM2;
(*
===========================================================================
|| ||
|| IFFM2 - Amiga (r) version ||
|| ||
|| Original Developers: November 15, 1988, Greg Epley ||
|| ||
|| Module Version: * 1.0.0, May 29, 1989, Greg Epley ||
|| First implementation; compiled with M2AMIGA ||
|| Rel. 3.1 ||
|| ||
|| ||
|| Copyright (c) 1988, 1989 Second Sight (tm) ||
|| ||
|| Amiga is a registered trademark of Commodore-Amiga, Inc. Second ||
|| Sight is a trademark of Second Sight, Lexington, North Carolina. ||
|| ||
===========================================================================
*)
(*
================================= IMPORTS =================================
*)
FROM DOS IMPORT FileHandlePtr;
FROM Exec IMPORT UByte;
FROM Graphics IMPORT BitMapPtr,
ViewModes, ViewModeSet;
(* NOTE: Heap routines are used to dynamically allocate memory space by
* some of the IFFM2 routines. Even if the client program should lose
* control this memory will be returned to the system unless a fatal
* M2Amiga crash occurs (in which case it doesn't matter anyway, since
* you have to re-boot). Also, in case you don't know this, the user of
* these routines is "the Client". *)
TYPE
(* IFF id's are stored as LONGINT types for efficient copy and compare. *)
ID = LONGINT;
CONST
(* These are shifting constants used to define the LONGINT IFF id's. *)
H = 1000000H; M = 10000H; L = 100H; V = 10H;
(* These LONGINT IFF id's are currently recognized by the IFF routines in
* this module. *)
IDFORM = ID("F")*H + ID("O")*M + ID("R")*L + ID("M");
IDILBM = ID("I")*H + ID("L")*M + ID("B")*L + ID("M");
IDBMHD = ID("B")*H + ID("M")*M + ID("H")*L + ID("D");
IDCMAP = ID("C")*H + ID("M")*M + ID("A")*L + ID("P");
IDBODY = ID("B")*H + ID("O")*M + ID("D")*L + ID("Y");
IDCAMG = ID("C")*H + ID("A")*M + ID("M")*L + ID("G");
IDEOFX = ID("E")*H + ID("O")*M + ID("F")*L + ID("X");
CONST
(* The maximum number of color registers allowed on the Amiga. *)
MaxColorRegister = 64;
TYPE
(*---- BitMapHeader -----------------------------------------------------*)
(* The BitMapHeader structure is specifically an IFF ILBM structure. *)
(* Type of masking for the data. *)
Masking = (mskNone, mskHasMask, mskHasTransparentColor, mskLasso);
(* Type of compression for the data. *)
Compression = (cmpNone, cmpByteRun1);
(* The BitMapHeader structure stores assorted information from an IFF ILBM
* BMHD (BitMapHeaDer) chunk. *)
BitMapHeader = RECORD
w, h : CARDINAL;
x, y : INTEGER;
nPlanes : UByte;
masking : Masking;
compression : Compression;
pad1 : UByte;
transparentColor : CARDINAL;
xAspect, yAspect : UByte;
pageWidth, pageHeight : INTEGER;
END;
BitMapHeaderPtr = POINTER TO BitMapHeader;
(* The IFFFileFrame structure stores assorted information related to each
* IFF file using the IFFM2 routines. Every item in this structure may
* not be used for every type of IFF file so pointer types are used for
* most of the items to cut down on wasted space. The frame space is
* allocated during OpenIFF() and freed by CloseIFF(). *)
IFFFileFrame = RECORD
filehandle : FileHandlePtr;
bmhd : BitMapHeaderPtr;
cmap : ARRAY [0..MaxColorRegister-1] OF INTEGER;
nColors : INTEGER;
bitmap : BitMapPtr;
camg : ViewModeSet;
END;
IFFFileFramePtr = POINTER TO IFFFileFrame;
(*---- OpenIFF ------------------------------------------------------------*)
(*
* Open an IFF file for reading or writing and return an IFFFileFramePtr if
* successful or NIL if not.
*
* The mode indicates whether to read [DOS oldFile] or write [DOS newFile].
* This also pre-initializes all the other frame items; it does not allocate
* any memory spaces for them but just sets such pointers to NIL.
*)
PROCEDURE OpenIFF (name : ARRAY OF CHAR; mode : LONGINT) : IFFFileFramePtr;
(*---- CloseIFF -----------------------------------------------------------*)
(*
* Close an IFF file previously opened with OpenIFF(). This also deallocates
* any memory spaces which were dynamically allocated by IFFM2 calls.
*)
PROCEDURE CloseIFF (VAR frame : IFFFileFramePtr);
(*---- PrintIFFError ------------------------------------------------------*)
(*
* Print a text error message to the M2Amiga standard output stream used by
* Terminal. Safe to call even if there is no error.
*)
PROCEDURE PrintIFFError ();
(*---- GetType ------------------------------------------------------------*)
(*
* Read the IFF file type chunk (e.g., ILBM, SMUS, 8SVX, ANIM, etc.) and
* return to the client as an ID. This will not return any types not
* currently supported.
*)
PROCEDURE GetType (frame : IFFFileFramePtr) : ID;
(*---- GetChunkHdr --------------------------------------------------------*)
(*
* Read an IFF file data chunk (e.g., BMHD, CMAP, BODY) and return its size
* and ID to the client.
*)
PROCEDURE GetChunkHdr (VAR frame : IFFFileFramePtr; VAR size : LONGINT) : ID;
(*---- GetPad -------------------------------------------------------------*)
(*
* Read an IFF file pad byte. Returns TRUE to client if successful, FALSE
* if not.
*)
PROCEDURE GetPad (frame : IFFFileFramePtr) : BOOLEAN;
(*---- GetUnknown ---------------------------------------------------------*)
(*
* Read an unrecognized IFF file data chunk and return TRUE if successful or
* FALSE if not.
*)
PROCEDURE GetUnknown (frame : IFFFileFramePtr; size : LONGINT) : BOOLEAN;
(*==== ILBM Standard Reader Routines ======================================*)
(*
* For standard ILBM files the following allocations and items are filled for
* you by calling the indicated routines:
*
* filehandle - filled by OpenIFF() if successful
* bmhd - structure space allocated and filled by GetBMHD(),
* also assumes display viewmodes (camg) if CAMG chunk
* not found yet [reads]; freed during CloseIFF()
* cmap - ARRAY of INTEGER RGB color values (about 120 bytes
* of static storage by GetCMAP() [reads]
* nColors - INTEGER 15-bits of static storage by GetCMAP()
* [reads]
* camg - ViewModeSet space elements are set during
* GetCAMG() [reads]
*
* Client must allocate and fill the following items [as needed]:
*
* bitmap - pointer to a BitMap structure BEFORE calling
* GetBODY() [reads] *)
(*---- GetBMHD ------------------------------------------------------------*)
(*
* Read an IFF ILBM BMHD (BitMapHeaDer) chunk; dynamically allocates the
* bmhd data space and fills it; also guesses at the display viewmodes if
* the CAMG chunk hasn't been found yet. Returns TRUE to client if
* successful or FALSE if not.
*)
PROCEDURE GetBMHD (VAR frame : IFFFileFramePtr; size : LONGINT) : BOOLEAN;
(*---- GetCMAP ------------------------------------------------------------*)
(*
* Read an IFF ILBM CMAP (ColorMAP) chunk; also sets a count of the number
* of colors in the color map chunk; refer to the frame's cmap entry for
* the format of the final contents after reading. Returns TRUE to client if
* successful or FALSE if not.
*)
PROCEDURE GetCMAP (VAR frame : IFFFileFramePtr; size : LONGINT) : BOOLEAN;
(*---- GetBODY ------------------------------------------------------------*)
(*
* Read an IFF ILBM BODY (bitplane data) chunk; this handles bitplane data
* with compression and/or masking applied; client should point the frame's
* bitmap item to a valid BitMap data space before calling this. Returns
* TRUE to client if successful or FALSE if not.
*)
PROCEDURE GetBODY (VAR frame : IFFFileFramePtr; size : LONGINT) : BOOLEAN;
(*---- GetCAMG ------------------------------------------------------------*)
(*
* Read an IFF ILBM CAMG (Commodore-AMiGa viewmodes) chunk; this translates
* the LONGINT numeric for the viewmodes and sets the proper elements in the
* frame's camg data space. Returns TRUE to client if successful or FALSE
* if not.
*)
PROCEDURE GetCAMG (VAR frame : IFFFileFramePtr; size : LONGINT) : BOOLEAN;
END IFFM2.